spin_unlock_irqrestore(&p->blk_ring_lock, flags);
/* Kick the relevant domain. */
- cpu_mask = mark_guest_event(p, _EVENT_BLK_RESP);
+ cpu_mask = mark_guest_event(p, _EVENT_BLKDEV);
guest_event_notify(cpu_mask);
}
if ( p != NULL )
{
kbd_ring_push(status, scancode);
- cpu_mask |= mark_guest_event(p, _EVENT_KBD);
+ cpu_mask |= mark_guest_event(p, _EVENT_PS2);
}
}
*/
/* Events that a guest OS may receive from the hypervisor. */
-#define EVENT_BLK_RESP 0x01 /* A block device response has been queued. */
+#define EVENT_BLKDEV 0x01 /* A block device response has been queued. */
#define EVENT_TIMER 0x02 /* A timeout has been updated. */
#define EVENT_DIE 0x04 /* OS is about to be killed. Clean up please! */
#define EVENT_DEBUG 0x08 /* Request guest to dump debug info (gross!) */
-#define EVENT_NET_TX 0x10 /* There are packets for transmission. */
-#define EVENT_NET_RX 0x20 /* There are empty buffers for receive. */
-#define EVENT_KBD 0x40 /* PS/2 keyboard or mouse event(s) */
+#define EVENT_NET 0x10 /* There are packets for transmission. */
+#define EVENT_PS2 0x20 /* PS/2 keyboard or mouse event(s) */
/* Bit offsets, as opposed to the above masks. */
-#define _EVENT_BLK_RESP 0
-#define _EVENT_TIMER 1
-#define _EVENT_DIE 2
-#define _EVENT_NET_TX 3
-#define _EVENT_NET_RX 4
-#define _EVENT_DEBUG 5
-#define _EVENT_KBD 6
+#define _EVENT_BLKDEV 0
+#define _EVENT_TIMER 1
+#define _EVENT_DIE 2
+#define _EVENT_DEBUG 3
+#define _EVENT_NET 4
+#define _EVENT_PS2 5
/*
* Virtual addresses beyond this are not modifiable by guest OSes.
{
/*
* Guest OS places packets into ring at tx_req_prod.
- * Guest OS receives DOMAIN_EVENT_NET_TX when tx_resp_prod passes tx_event.
+ * Guest OS receives EVENT_NET when tx_resp_prod passes tx_event.
* Guest OS places empty buffers into ring at rx_req_prod.
- * Guest OS receives DOMAIN_EVENT_NET_RX when rx_rssp_prod passes rx_event.
+ * Guest OS receives EVENT_NET when rx_rssp_prod passes rx_event.
*/
unsigned int tx_req_prod, tx_resp_prod, tx_event;
unsigned int rx_req_prod, rx_resp_prod, rx_event;
vif->tx_resp_prod = vif->shared_idxs->tx_resp_prod = pos;
if ( pos == vif->shared_idxs->rx_event )
{
- unsigned long cpu_mask = mark_guest_event(vif->domain, _EVENT_NET_TX);
+ unsigned long cpu_mask = mark_guest_event(vif->domain, _EVENT_NET);
guest_event_notify(cpu_mask);
}
spin_unlock_irqrestore(&vif->tx_lock, flags);
vif->rx_resp_prod = vif->shared_idxs->rx_resp_prod = pos;
if ( pos == vif->shared_idxs->rx_event )
{
- unsigned long cpu_mask = mark_guest_event(vif->domain, _EVENT_NET_RX);
+ unsigned long cpu_mask = mark_guest_event(vif->domain, _EVENT_NET);
guest_event_notify(cpu_mask);
}
spin_unlock_irqrestore(&vif->rx_lock, flags);
typedef unsigned char byte; /* from linux/ide.h */
-#define XLBLK_RESPONSE_IRQ _EVENT_BLK_RESP
+#define XLBLK_RESPONSE_IRQ _EVENT_BLKDEV
#define DEBUG_IRQ _EVENT_DEBUG
static blk_ring_t *blk_ring;
blk_ring->req_prod = blk_ring->resp_prod = resp_cons = req_prod = 0;
error = request_irq(XLBLK_RESPONSE_IRQ, xlblk_response_int,
- SA_SAMPLE_RANDOM, "xlblk-response", NULL);
+ SA_SAMPLE_RANDOM, "blkdev", NULL);
if ( error )
{
printk(KERN_ALERT "Could not allocate receive interrupt\n");
#include <net/sock.h>
#include <net/pkt_sched.h>
-#define NET_TX_IRQ _EVENT_NET_TX
-#define NET_RX_IRQ _EVENT_NET_RX
+#define NET_IRQ _EVENT_NET
#define TX_MAX_ENTRIES (TX_RING_SIZE - 2)
#define RX_MAX_ENTRIES (RX_RING_SIZE - 2)
#define RX_BUF_SIZE ((PAGE_SIZE/2)+1) /* Fool the slab allocator :-) */
-static void network_rx_int(int irq, void *dev_id, struct pt_regs *ptregs);
-static void network_tx_int(int irq, void *dev_id, struct pt_regs *ptregs);
+static void network_interrupt(int irq, void *dev_id, struct pt_regs *ptregs);
static void network_tx_buf_gc(struct net_device *dev);
static void network_alloc_rx_buffers(struct net_device *dev);
static void network_free_rx_buffers(struct net_device *dev);
network_alloc_rx_buffers(dev);
- error = request_irq(NET_RX_IRQ, network_rx_int,
- SA_SAMPLE_RANDOM, "net-rx", dev);
+ error = request_irq(NET_IRQ, network_interrupt,
+ SA_SAMPLE_RANDOM, "network", dev);
if ( error )
{
- printk(KERN_WARNING "%s: Could not allocate receive interrupt\n",
+ printk(KERN_WARNING "%s: Could not allocate network interrupt\n",
dev->name);
network_free_rx_buffers(dev);
goto fail;
}
- error = request_irq(NET_TX_IRQ, network_tx_int,
- SA_SAMPLE_RANDOM, "net-tx", dev);
- if ( error )
- {
- printk(KERN_WARNING "%s: Could not allocate transmit interrupt\n",
- dev->name);
- free_irq(NET_RX_IRQ, dev);
- network_free_rx_buffers(dev);
- goto fail;
- }
-
error = request_irq(_EVENT_DEBUG, dbg_network_int, SA_SHIRQ,
"debug", dev);
if ( error )
spin_unlock_irqrestore(&np->tx_lock, flags);
}
-inline pte_t *get_ppte(void *addr)
+
+static inline pte_t *get_ppte(void *addr)
{
pgd_t *pgd; pmd_t *pmd; pte_t *pte;
pgd = pgd_offset_k( (unsigned long)addr);
return pte;
}
+
static void network_alloc_rx_buffers(struct net_device *dev)
{
unsigned int i, id;
}
-static void network_rx_int(int irq, void *dev_id, struct pt_regs *ptregs)
+static void network_interrupt(int irq, void *dev_id, struct pt_regs *ptregs)
{
unsigned int i;
struct net_device *dev = (struct net_device *)dev_id;
struct sk_buff *skb;
rx_resp_entry_t *rx;
+ network_tx_buf_gc(dev);
+
again:
for ( i = np->rx_resp_cons;
i != np->net_idx->rx_resp_prod;
}
-static void network_tx_int(int irq, void *dev_id, struct pt_regs *ptregs)
-{
- struct net_device *dev = (struct net_device *)dev_id;
- network_tx_buf_gc(dev);
-}
-
-
int network_close(struct net_device *dev)
{
netif_stop_queue(dev);
* no sensible way of retrieving them.
*/
#if 0
- free_irq(NET_RX_IRQ, dev);
- free_irq(NET_TX_IRQ, dev);
+ free_irq(NET_IRQ, dev);
network_free_rx_buffers(dev);
kfree(np->net_ring->rx_ring);
#include <asm/hypervisor.h>
#include <asm/ptrace.h>
-#define NET_TX_IRQ _EVENT_NET_TX
-#define NET_RX_IRQ _EVENT_NET_RX
-#define NET2_TX_IRQ _EVENT_NET2_TX
-#define NET2_RX_IRQ _EVENT_NET2_RX
-#define TIMER_IRQ _EVENT_TIMER
+#define TIMER_IRQ _EVENT_TIMER
#define NR_IRQS (sizeof(HYPERVISOR_shared_info->events) * 8)
#include <linux/pm.h>
#include <asm/io.h>
-
-#define KEYBOARD_IRQ _EVENT_KBD
-#define AUX_IRQ _EVENT_KBD
-
-/* THIS SECTION RELATIVELY UNTOUCHED */
-
extern int pckbd_setkeycode(unsigned int scancode, unsigned int keycode);
extern int pckbd_getkeycode(unsigned int scancode);
extern int pckbd_translate(unsigned char scancode, unsigned char *keycode,
}
/* resource allocation */
-#define kbd_request_region() do { } while (0)
-#define kbd_request_irq(handler) request_irq(_EVENT_KBD, handler, 0, "PS/2 kbd", NULL)
+#define kbd_request_region() \
+ do { } while (0)
+#define kbd_request_irq(handler) \
+ request_irq(_EVENT_PS2, handler, 0, "ps/2", NULL)
/* could implement these with command to xen to filter mouse stuff... */
#define aux_request_irq(hand, dev_id) 0